GoでWebサイト作る
概要
このへんを見て学ぶ
https://blog.a-know.me/entry/2017/12/26/234528
最終的にはDockerとかでやろう。
GOROOTってなーに
Goのインストールパス。
GOPATHってなーに
プロジェクト置き場。
ここの下に置かないといけないのなんでなんだろ、ちょっとわからんので調べよう。
-> workspaceだからとのこと。なるほど。
go install コマンドは何をしてるの?
binフォルダ以下にバイナリができる。
パッケージのコンパイルと依存性解決、というのがinstallコマンドの役割ぽい。
go build
goのコードをその場でビルドできる。依存性解決とかやるにはgo getとかやる必要がある。
installはそのへんを自動化してくれるのかな。
http://imagawa.hatenadiary.jp/entry/2016/12/24/190000
-> 正解っぽい。
ChitChat編
コードがすでに完成されているものを見るしかないのがわかった。どうやって切り捨てていこうかなー。
git化した。
続きをやっていく、そろそろDBに入る!
ここでいうThreadとは多言語のスレッドのことではなくチャットのスレッドのこと。
Postgressapp入れてpostgress動かす。
Postgressapp.comからDL、
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
で接続できるように。
psql --version
psql (PostgreSQL) 12.1
Postgress.app上でInitializeってやると初期化開始できた。
createdb chitchat
をコマンドラインで実行した結果、
こんな感じになった。
で、次のsetup.sqlファイルをpsqlコマンドで実行すると、-dで設定したデータベースに対してsql文が発行される。
psql -f data/setup.sql -d chitchat
drop table posts;
drop table threads;
drop table sessions;
drop table users;
create table users
(
id serial primary key,
uuid varchar(64) not null unique,
name varchar(255),
email varchar(255) not null unique,
password varchar(255) not null,
created_at timestamp not null
);
create table sessions
(
id serial primary key,
uuid varchar(64) not null unique,
email varchar(255),
user_id integer references users(id),
created_at timestamp not null
);
create table threads
(
id serial primary key,
uuid varchar(64) not null unique,
topic text,
user_id integer references users(id),
created_at timestamp not null
);
create table posts
(
id serial primary key,
uuid varchar(64) not null unique,
body text,
user_id integer references users(id),
thread_id integer references threads(id),
created_at timestamp not null
);
users, sessions, threads, postsなどのテーブルが作成される。
それぞれidがあって、みたいな構造になってる。
で、これにアクセスするDbインスタンスを作る。
db connect errsql: unknown driver "postgres" (forgotten import?)
コードを実行するとこんな感じのエラーが出た。
で、すでにimportされてるdatabase/sqlはこれ汎用SQLのドライバーで、その下層に位置するべきpostgresのドライバがimportされてなかった。
go get github.com/lib/pq
で解決した。importだと解決できなかった(解決されなかった)のなんでだろう。
DBについて
https://qiita.com/H-A-L/items/fe8cb0e0ee0041ff3ceb
ここをみてポスグレについて学んでいる。
/Applications/Postgres.app/Contents/Versions/12/bin/psql -p5432 “chitchat”
みたいなコマンドでchitchat DBにログイン、
select * from users;
とかでユーザー一覧を取得。
chitchat=# select * from users;
id | uuid | name | email | password | created_at
----+--------------------------------------+------+-------+------------------------------------------+----------------------------
1 | 31467eda-ae54-47e6-5a41-25cbee98e6ad | a | a@a.a | df51e37c269aa94d38f93e537bf6e2020b21406c | 2019-12-04 15:44:49.768178
こんな風に取得できる。あとは条件をいろいろorder byとかで決めれば良さそう。語句はぜんぜん覚えられないな、、へんな法則してそう。
Queryについて、
err = Db.QueryRow("select id, uuid, email, user_id, created_at from sessions where uuid = $1", session.UUID).Scan(&session.ID, &session.UUID, &session.Email, &session.UserID, &session.CreatedAt)
こんな感じに書くと、from句の前に書いた情報のうち、where句に該当する = uuidが指定したものと一致するデータが取得でき、Scanメソッドで代入させられる。
さて、privateには入れた = ログインの概念が理解できたんで、次いってみよう。スレッドどうやって作るの? UI足りてなくない?
-> テンプレートエンジンにcontentを足すと表示できた。生成もOK。
で、ここからどうするか。とりあえず全体を流し読みしよう。